package cn.edu.tjpu.lxy.epr;

public class TestDriver4 {

	/*
	 * 比较运算优先级高于逻辑运算。
	 * 
	 * 逻辑运算：! && || （优先级从高到低）
	 * 逻辑运算的操作数是 boolean类型，运算结果也是boolean类型；
	 * 区别于位运算：位运算的操作数是二进制的0 1.
	 * 
	 * ! : 非运算。true变false，false变true.
	 * &&: 与运算。两个操作数为true时结果为true，其他为false。  且的关系；
	 * ||： 或运算。两个操作数为false时结果为false，其他为true。或的关系。
	 * 
	 * 
	 */
	
	/*
	 * 逻辑运算短路现象：
	 * 
	 * 在多个连续的与运算中，从左往右当出现一个表达式结果为false时，其后的与运算不在进行处理；
	 * 在多个连续的或运算中，从左往右当出现一个表达式结果为true时，其后的或运算不在进行处理；
	 * 
	 */
	
	/*
	 * 自增、自减运算：
	 * ++ ： 进行自增1运算（自增的1代表的是偏移量）；
	 * -- ： 进行自减1运算（自增的1代表的是偏移量）；
	 * 分两种情况进行处理：
	 * ++变量 -- 表达式的值是变量+1之后的值；
	 * 变量++ -- 表达式的值是变量+1之前的值；
	 * 不管是先增还是后增运算，进行自增运算变量的值是+1的。
	 * 
	 * 自减雷同。
	 * 
	 */
	/*
	 * 三元运算符： 又叫问号表达式
	 * 
	 * 语法：
	 * iResult = 判定表达式?表达式1:表达式2;
	 * 
	 * 如果判定表达式结果为true，则取表达式1的值作为整个问号表达式的结果；
	 * 如果判定表达式结果为false，则取表达式2的值作为整个问号表达式的结果；
	 * 
	 * 问号表达式可以进行嵌套，也就是 表达式1或表达式2的部分可以继续为问号表达式
	 * 
	 * 问号表达式等价于 if-else 双分支if语句；
	 * 
	 * 嵌套的问号表达式等价于  if - else if-else if-else 多分支if语句
	 *  
	 *  
	 */
	public static void main(String[] args) {
		// 逻辑运算
		test01();
		
		System.out.println("-------------------------");
		test02();
		System.out.println("-------------------------");
		test03();
		
		System.out.println("-------------------------");
		test04();
		System.out.println("-------------------------");
		test05();
	}
	/**
	 * 逻辑运算
	 */
	private static void test01(){
		int iNum1 = 20;
		int iNum2 = 21;
		int iNum3 = 22;
		
		System.out.println("iNum2>iNum1 && iNum2>iNum3 判定结果："+(iNum2>iNum1 && iNum2>iNum3));
		System.out.println("iNum2>iNum1 || iNum2>iNum3 判定结果："+(iNum2>iNum1 || iNum2>iNum3));	
		
		System.out.println("iNum2>iNum1 || iNum2>iNum3 判定结果："+!(iNum2>iNum1 || iNum2>iNum3));
		System.out.println("!(iNum2>iNum1 || !(iNum2>iNum3)) 判定结果："+!(iNum2>iNum1 || !(iNum2>iNum3)));
	}

	/**
	 * 自增自减运算
	 */
	private static void test02(){
		int iNum1 = 20;
		int iNum2 = 20;
		int iNum3 = 22;
		
		System.out.println("iNum1 = "+iNum1+";iNum2="+iNum2);
		System.out.println("---------");
		
		int iResult1 = iNum1++;
		System.out.println("iResult1 = "+iResult1+";iNum1="+iNum1);
		
		int iResult2 = ++iNum2;
		System.out.println("iResult2 = "+iResult2+";iNum2="+iNum2);
	}
	
	/**
	 * 逻辑运算短路问题
	 */
	private static void test03() {
		int iNum1 = 20;
		int iNum2 = 20;
		int iNum3 = 22;

		boolean isResult = ++iNum1 < iNum2++ && ++iNum3 > 23;
		System.out.println("isResult=" + isResult + ";iNum3=" + iNum3);
		
		iNum1 = 20;
		iNum2 = 20;
		iNum3 = 22;
		boolean isResult2 = ++iNum1 > iNum2++ && ++iNum3 > 23;
		System.out.println("isResult2=" + isResult2 + ";iNum3=" + iNum3);

		
		iNum1 = 20;
		iNum2 = 20;
		iNum3 = 22;
		boolean isResult3 = ++iNum1 > iNum2++ || ++iNum3 > 23;
		System.out.println("isResult3=" + isResult3 + ";iNum3=" + iNum3);
		
		
		iNum1 = 20;
		iNum2 = 20;
		iNum3 = 22;
		boolean isResult4 = iNum1>10 || iNum2++<10 && ++iNum1 > iNum2++ || ++iNum3 > 23;
		System.out.println("isResult4=" + isResult4 + ";iNum1=" + iNum1+ ";iNum2=" + iNum2+ ";iNum3=" + iNum3);
		
		iNum1 = 20;
		iNum2 = 20;
		iNum3 = 22;
		boolean isResult5 = iNum1<10 || iNum2++<10 && ++iNum1 > iNum2++ || ++iNum3 > 23;
		System.out.println("isResult5=" + isResult5 + ";iNum1=" + iNum1+ ";iNum2=" + iNum2+ ";iNum3=" + iNum3);
	}
	
	/**
	 * 问号表达式
	 */
	private static void test04() {
		//成绩
		int iScore = 90;
		// 成绩等级
		String strR= iScore >=90?"优秀":"一般";
		System.out.println("你的成绩是："+strR);
		
	}
	
	/**
	 * 问号表达式
	 */
	private static void test05() {
		// 成绩
		int iScore = 100;
		// 成绩等级
		String strR = iScore >= 90 ? "优秀" : 
			iScore >= 80 ? "良好" : 
				iScore >= 70 ? "中" : 
					iScore >= 60 ? "及格" : "不及格";
		System.out.println("你的成绩是：" + strR);

	}
}
